/*
  This file is part of 'Trivial chess'.

  'Trivial chess' is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  'Trivial chess' is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with 'Trivial chess'.  If not, see <http://www.gnu.org/licenses/>.
*/

/* SVN FILE: $Id$ */
/**
 * @author         $Author$
 * @version        $Rev$
 * @lastrevision   $Date$
 * @filesource     $URL$
 */

#ifndef CONFIG_H_
#define CONFIG_H_

#include <boost/cstdint.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>

typedef int16_t Int;

#include "color/ColorOrd.h"
typedef ColorOrd<Int> Color;

#include "piece/PieceOrd.h"
typedef PieceOrd<Int> Piece;
//#include "piece/PieceShift.h
//typedef PieceShift<Int> Piece;

#include "man/ManOrd.h"
typedef ManOrd<Color, Piece, Int> Man;
//#include "man/ManCom.h"
//typedef ManCom<Color, Piece, Int> Man;

#include "file/FileOrd.h"
typedef FileOrd<Int> File;

#include "file_scalar/OrdFileScalar.h"
typedef OrdFileScalar<File, Int> FileScalar;

#include "rank/RankOrd.h"
typedef RankOrd<Int> Rank;
//#include "rank/RankShift.h"
//typedef RankShift<Int> Rank;

#include "rank_scalar/OrdRankScalar.h"
typedef OrdRankScalar<Rank, Int> RankScalar;

#include "square/SquareOrd.h"
typedef SquareOrd<File, Rank, Int> Square;
//#include "square/SquareCom.h"
//typedef SquareCom<File, Rank, Int> Square;

#include "square_vector/ComSquareVector.h"
typedef ComSquareVector<Square, FileScalar, RankScalar, Int> SquareVector;

//#include "castling_availability/CastlingAvailabilityCom.h"
//typedef CastlingAvailabilityCom CastlingAvailability;
#include "castling_availability/CastlingAvailabilityOrd.h"
typedef CastlingAvailabilityOrd<Int> CastlingAvailability;

//#include "board/Board8x8.h"
//typedef Board8x8<Square, Man, CastlingAvailability, int16_t> Board;
#include "board/Board64.h"
typedef Board64<Square, Man, CastlingAvailability, int16_t> Board;

#include "move/MoveCom.h"
typedef MoveCom<Board> Move;

#include "unmake_move_info/UnmakeMoveInfoStd.h"
typedef UnmakeMoveInfoStd<Man, Move, Int> UnmakeMoveInfo;

#include "move_maker/MoveMakerStd.h"
typedef MoveMakerStd<Board, Move, UnmakeMoveInfo> MoveMaker;

#include "affect/LeaperAttackVec.h"
typedef LeaperAttackVec<Board,Square,Man,SquareVector> LeaperAttack;

#include "affect/SliderAttackVec.h"
typedef SliderAttackVec<Board,Square,Man,SquareVector> SliderAttack;

#include "affect/PawnMoveVec.h"
typedef PawnMoveVec<Board,Square,Man,SquareVector> PawnMove;

#include "board_men/BoardMenAllSq.h"
typedef BoardMenAllSq<Board,Square> BoardMenAll;

#include "board_men/BoardMenColorSq.h"
typedef BoardMenColorSq<Board,Square, Color> BoardMenColor;


#include "move_generator/MoveGeneratorSq.h"
typedef MoveGeneratorSq<Board,Move> MoveGenerator;


#endif /* CONFIG_H_ */
